package com.cy.Web;

import Pojo.JesonResult;
import com.cy.Service.SysMenusService;
import com.cy.pojo.SysMenu;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 创建SysMenuController类型，通过此对象处理客服端请求
 *
 * 1）处理什么请求？
 * 1.1 Get
 * utl:/menu/
 * url:/menu/{id}
 * 1.2 Post
 * url:/menu/
 * 1.3 Put
 * url:/menu/
 * 1.4 Delete这里不需要
 * url:/menu/{id}
 *
 * 2)参数处理
 * 2.1 @PathVariable(/menu/{id})  描述方法是，表示参数的值来自于url,接收id值
 * 2.2 @RequestBody({id:10,name:""...})  处理请求体中数据，修饰方法参数
 * 2.3 @ResponseBody 将数据写到响应体中，修饰方法的返回值，把返回值写道响应体中
 * 2.4 @RequestParam("/?id=10&...")
 *
 * 3）响应什么数据（JsonResult）？
 *3.1 JsonResult （XxxResult）
 *3.2 ... ...
 * 4）异常数据如何处理？
 * 4.1 Controller方法内部,局部异常处理每个方法内部try{}catch{}
 * 4.2 Controller类的内部，专门定义异常处理方法，局部异常处理，@ExceptionHandler
 * 4.3 Controller类的外部，定义全局异常处理类（@RestControllerAdvice,...推荐）
 * 5) 控制Controller的方法调用？（HandlerIntercptor）
 * 6）分页，这里不需要
 * */

@RequestMapping("/menu/")
@RestController
public class SysMenuController {
    @Autowired
    private SysMenusService sysMenusService;
    /**查询所有菜单以及菜单对应的上级菜单名称
     * url：http：//ip：port/menu/
     * */

    @GetMapping
    public JesonResult doFindMenus(){
        return new JesonResult(sysMenusService.selectMenus());
    }
    /**获取菜单节点信息信息
     * url：http：//ip：port/menu/treenodes/
     * */
    @GetMapping("/treenodes/")
    public JesonResult doFindTreeNodes(){
        return new JesonResult(sysMenusService.selectMenuTreeNodes());
    }
    /**基于id查询所有信息
     * @param id
     * url：http：//ip：port/{id}
     * */
    @GetMapping("{id}")
    public JesonResult doFindById(@PathVariable Integer id){
        if(id==null){
            return new JesonResult("此记录未被查到");
        }
        return new JesonResult(sysMenusService.selectById(id));
    }
    /**添加菜单信息
     * @param menu{id：10，name：...}jeson字符
     * url：http：//ip：port/menu/
     * */
    @PostMapping
    public JesonResult doInsert(@RequestBody SysMenu menu){
        sysMenusService.insertMenu(menu);
        return new JesonResult("Insert OK");
    }
    /**更新菜单信息
     * @param menu{id：10，name：...}jeson字符
     * url：http：//ip：port/menu/
     * */
    @PutMapping
    public JesonResult doUpdate(@RequestBody SysMenu menu){
        sysMenusService.updateMenu(menu);
        return new JesonResult("Update OK");
    }
}
/**
 * 拓展模块：
 * 1. 组织管理（部门管理）
 * 2. 商品分类（一级分类，二级分类...)
 * 3. 文章分类（小说-->武侠-->.....)
 * */